package businessLayer;
import java.util.*;
/**
 * Die Interface Klasse BL_CRUD gibt eine Vorgabe fuer die Implementierung von Klassen der Datenhaltungsklassen Raum, Lehrveranstaltung, Dozent und Studiengang.
 * Um eine groesstmoegliche Flexibilitaet zu gewaehrleisten wurde der Mechanismus der Generics genutzt.
 * 
 *@param <T> Der Klassentyp der fuer die Implementierung des Interfaces genutzt wird.
 * 
 * @author Kai Gutzeit
 * @version 13.12.2014
 */
public interface BL_CRUD<T>
{
    /**
     * Die Create Methode bekommt als Parameter ein Objekt vom Typ T, welches die grundlegenden Informationen des Datenhaltungsobjektes enthaelt.
     * Vor Hinzufuegen des Objektes in die private variable businessObjects wird noch ein eindeutiger Schluessel fuer das Objekt vom Typ UUID erzeugt.
     * Bei Erfolg wird dasselbe Objekt ergaenzt mit einer eindeutigen ID zurueckgegeben. In der Klasse welches das Interface implementiert muss eine List<T> private Variable
     * vorhanden sein, welche in der Lage ist, eine Referenz aufzubauen.
     * 
     * @param  iBusinessObject uebergibt die Referenz zu einem Geschaeftsobjekt vom Typ T, so dass diese Referenz einer Aufzaehlung hinzugefuegt werden kann.
     * 
     * @return Das erstellte Objekte mit einer eindeutig erzeugten UUID als ID.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public T Create(T iBusinessObject) throws IllegalArgumentException;
    
     /**
     * Die Read Methode erlaubt es anhand eines eindeutigen Schluessels ein Geschaeftsobjekt aus einer Aufzaehlung zu erhalten. Diese Aufzaehlung sollte als private Variable in der Klasse vorhanden sein.
     * Und bestmoeglich bei Instanziierung (also im Konstruktor) uebergeben werden.
     * 
     * @param  id id Es wird eine eindeutige id vom Typ UUID uebergeben.
     * 
     * @return Das zu lesende Objekt vom Typ T.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public T Read(UUID id) throws Exception;
    
     /**
     * Die Update Methode uebermittelt ein komplettes Objekt vom Typ T und sorgt fuer das aktualisieren des jeweiligen Objektes in einer Aufzaehlung.
     * 
     * @param  iBusinessObject Es wird das zu aktualisierende Objekt vom Typ T uebergeben.
     * 
     * @return Ein boolscher Wert fuer den Erfolg oder Nichterfolg der Update-Operation.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Boolean Update(T iBusinessObject) throws Exception;
    
     /**
     * Die Delete Methode bekommmt eine id als UUID Objekt uebergeben, welches das Objekt aus einer Aufzaehlung eindeutig identifiziert und anschliessend entfernt.
     * 
     * @param  UUID id Es wird eine eindeutige id vom Typ UUID uebergeben.
     * 
     * @return Ein boolscher Wert fuer den Erfolg oder Nichterfolg der Delete-Operation.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Boolean Delete(UUID id) throws Exception;
}
